unsigned char binadd(unsigned char *A, unsigned char *B, unsigned char*C, int nbits) {
    unsigned char carry = 0;
    int i;
    for(i = nbits - 1; i >= 0; i--) {
        C[i] = (*(A + i) ^ *(B + i)) ^ carry;
        carry = *(A + i) & *(B + i);
    }
    return carry;
}